<?php

namespace app\index\controller;

use think\Cache;
use think\Controller;
use think\Db;
use think\Loader;
use think\Request;
use think\Session;
use think\Validate;
use tree\Tree;

class Index extends Controller
{
    public function toastTest()
    {
        return $this->fetch();
    }

    public function select2()
    {
        return $this->fetch();
    }

    public function treeTest()
    {
        $obj = new Tree();
        $list = Db::name('menu')->field('id,pid,name')->select();
        $tree = $obj->getTreeData($list);
        echo "<pre>";
        print_r($tree);
        exit;
    }

    public function testUrl()
    {
        // 网页地址
        $url = 'https://www.wjx.cn/vm/mNoH6rv.aspx';

        // 使用 file_get_contents 获取网页内容
        $html = @file_get_contents($url);

        if ($html === false) apiReturn(2, '无法获取网页内容');

        // 检查 DOMDocument 类是否可用
        if (!class_exists('DOMDocument')) apiReturn(2, 'DOMDocument 类未找到。请启用 PHP 的 DOM 扩展。');

        // 初始化 DOMDocument 并加载 HTML
        $dom = new \DOMDocument();
        libxml_use_internal_errors(true);
        $loaded = $dom->loadHTML($html, LIBXML_NOERROR | LIBXML_NOWARNING);
        libxml_clear_errors();

        if (!$loaded) apiReturn(2, '无法解析 HTML 内容');

        // 使用 DOMXPath 来查询特定部分的内容
        $xpath = new \DOMXPath($dom);

        // 找到 id="fieldset1" 的部分
        $fieldset = $xpath->query('//*[@id="fieldset1"]')->item(0);

        if (!$fieldset) apiReturn('未找到 id="fieldset1" 的部分');

        $questions = [];

        // 查询所有的 "field" div
        foreach ($xpath->query('.//div[contains(@class, "field")]', $fieldset) as $fieldDiv) {
            // 获取问题的文本
            $questionDiv = $xpath->query('.//div[@class="field-label"]', $fieldDiv)->item(0);
            if (!$questionDiv) {
                continue; // 如果没有找到问题，跳过
            }
            $questionText = trim($questionDiv->textContent);

            // 初始化答案数组
            $answers = [];

            // 查找包含答案选项的 "ui-controlgroup" div
            $controlGroupDiv = $xpath->query('.//div[contains(@class, "ui-controlgroup")]', $fieldDiv)->item(0);
            if ($controlGroupDiv) {
                // 查找所有的 "div.label" 元素作为答案选项
                foreach ($xpath->query('.//div[@class="label"]', $controlGroupDiv) as $answerDiv) {
                    $answerText = trim($answerDiv->textContent);
                    if (!empty($answerText)) {
                        $answers[] = $answerText;
                    }
                }
            }

            // 将问题和答案加入数组
            $questions[] = [
                'question' => $questionText,
                'answers' => $answers
            ];
        }

        echo "<pre>";
        print_r($questions);
        exit;

    }


    /**
     * @param $url
     * @param $data
     * @return mixed|false
     */
    public function getCurl($url, $data = null, $header = null)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        // 设置连接超时时间（单位：秒）
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 60); // 60 秒
        // 设置请求超时时间（单位：秒）
        curl_setopt($curl, CURLOPT_TIMEOUT, 120);       // 120 秒
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
        if (!empty($data)) {
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        // 设置header头
        if (!empty($header)) curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

        $response = curl_exec($curl);
        if ($response === false) {
            // 处理 CURL 请求失败的情况
            echo 'CURL Error: ' . curl_error($curl);
            return false;
        } else {
            // 请求成功，返回 API 响应数据
            return $response;
        }

        curl_close($curl);
    }

    private $api_key = 'sk-23079ec95fee433e8c0d09c0610ae7f4';

    public function userTextPrompt()
    {
        $input = Request()->param();

        $user_id = $input['user_id'];
        $prompt = $input['prompt'];
        $type = $input['type'] ? : 0;

        if (empty($user_id)) apiReturn(2, '您还未登录，请先登录');
        if (empty($prompt)) apiReturn(2, '请输入内容');

        switch ($type) {
            case 1:
                $default_prompt = '我是小红书文案助手，你有什么文案需要我帮你写吗？';
                $first_messages = [
                    [
                        'role' => 'system',
                        'content' => $default_prompt
                    ]
                ];
                break;
            case 2:
                $default_prompt = '我可以帮你进行诗词创作，你有什么想法吗？';
                $first_messages = [
                    [
                        'role' => 'system',
                        'content' => $default_prompt
                    ]
                ];
                break;
            case 3:
                $default_prompt = '将你需要扩写的句子发给我，我可以帮你进行扩写哦';
                $first_messages = [
                    [
                        'role' => 'system',
                        'content' => $default_prompt
                    ]
                ];
                break;
            case 4:
                $default_prompt = '我可以帮你生成标题';
                $first_messages = [
                    [
                        'role' => 'system',
                        'content' => $default_prompt
                    ]
                ];
                break;
            case 5:
                $default_prompt = '我可以帮你撰写营销文案，你有什么想法吗？';
                $first_messages = [
                    [
                        'role' => 'system',
                        'content' => $default_prompt
                    ]
                ];
                break;
            case 6:
                $default_prompt = '我可以帮你进行朋友圈文案创作，你有什么想法吗？';
                $first_messages = [
                    [
                        'role' => 'system',
                        'content' => $default_prompt
                    ]
                ];
                break;
            case 7:
                $default_prompt = '我可以帮你制作方案，你有什么想法吗？';
                $first_messages = [
                    [
                        'role' => 'system',
                        'content' => $default_prompt
                    ]
                ];
                break;
            case 8:
                $default_prompt = '我是直播带货剧本生成器，你可以输入你的商品信息，我会帮你生成一段直播带货的剧本。';
                $first_messages = [
                    [
                        'role' => 'system',
                        'content' => $default_prompt
                    ]
                ];
                break;
            case 9:
                $default_prompt = '我是短视频脚本生成器，你可以输入你的视频内容，我会帮你生成一段短视频的脚本。';
                $first_messages = [
                    [
                        'role' => 'system',
                        'content' => $default_prompt
                    ]
                ];
            default:
                $default_prompt = '我是问卷调查助手，我可以随机帮你生成答案';
                $first_messages = [
                    [
                        'role' => 'system',
                        'content' => $default_prompt
                    ]
                ];
                break;
        }

        $list = Db::name('message')->field('id,prompt,text')->where(['user_id' => $user_id, 'type' => $type])->order('id asc')->select();
        $history_messages = [];
        if ($list) {
            foreach ($list as &$v) {
                $history_messages[] = [
                    'role' => 'user',
                    'content' => $v['prompt']
                ];
                $history_messages[] = [
                    'role' => 'assistant',
                    'content' => $v['text']
                ];
            }
        }

        $prompt_messages = [
            [
                'role' => 'user',
                'content' => $prompt
            ]
        ];

        $messages = array_merge($first_messages, $history_messages, $prompt_messages);
        $data = $this->textGeneration($messages);
        if ($data) {
            $text = $data['output']['text'];
            $request_id = $data['request_id'];

            if ($prompt && $text) {
                $insert_data = [
                    'user_id' => $user_id,
                    'prompt' => $prompt,
                    'text' => $text,
                    'request_id' => $request_id,
                    'type' => $type,
                    'create_time' => time()
                ];
                Db::name('message')->insert($insert_data);

                $new_messages = [
                    'role' => 'assistant',
                    'content' => $text
                ];

                apiReturn(1, '获取数据成功', $new_messages);
            } else {
                apiReturn(2, '获取数据失败');
            }
        } else {
            apiReturn(2, '获取数据失败');
        }
    }

    /**
     * 文本智能问答
     * */
    public function textGeneration($messages)
    {
        $url = 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation';

        $header = [
            'Content-Type: application/json',
            'Authorization: Bearer ' . $this->api_key,
            //            'X-DashScope-SSE' => 'enable'
        ];

        $input = [
            'messages' => $messages
        ];
        $data = [
            'model' => 'qwen1.5-0.5b-chat',
            'input' => $input
        ];

        $res = $this->getCurl($url, json_encode($data), $header);
        file_put_contents(RUNTIME_PATH . 'data.txt', $res);
        if ($res !== false) {
            // 处理 API 响应数据
            $responseData = json_decode($res, true);

            return $responseData;
        } else {
            return false;
        }
    }


    public function test()
    {
        // 目标 URL
        $url = 'https://www.wjx.cn/joinnew/processjq.ashx';

        // 提交的数据
        $data = [
            'submitdata' => '1$1}2$3}3$2}4$1|2|3|4}5$测试测试'
        ];

        // 初始化 cURL 会话
        $ch = curl_init();

        // 设置 cURL 选项
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);                           // 使用 POST 方法
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));  // 提交的数据
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                 // 返回响应结果，而不是直接输出
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);                // 禁用 SSL 验证（如需要）

        // 执行请求并获取响应
        $response = curl_exec($ch);

        // 检查是否有错误
        if (curl_errno($ch)) {
            echo 'cURL 错误: ' . curl_error($ch);
        } else {
            // 输出响应结果
            echo '响应结果: ' . $response;
        }

        // 关闭 cURL 会话
        curl_close($ch);
    }
}
